/*
 * @lc app=leetcode.cn id=424 lang=java
 *
 * [424] 替换后的最长重复字符
 */

// @lc code=start
class Solution {
    //仅由大写英文字母组成的字符串,那么可以开一个26长度的数组存储
    //是这样的，双指针移到最大长度之后，如果之后找不到更长的，i,j都是同时增加的，故最后返回j-i可得长度
    //这题目还是不太难的，只是我一时之间脑袋没转过来。太久没写这种双指针的题目了。
    public static int characterReplacement(String s, int k) {
        int maxSame=0,len=s.length();//maxSame记录范围内数量最多的字符个数
        // if(len<2) return len;//如果字符串长度为0或1，返回其长度即可

        int[] numbers = new int[26];//每个数字出现的次数

        int i = 0, j = 0;//双指针，前后指针
        while(j<len){//后指针指到末尾的时候才结束
            int index = s.charAt(j)-'A';//映射
            numbers[index]++;
            maxSame=Math.max(maxSame, numbers[index]);//比对这个字符的数量是否是最多的。
            if(maxSame+k<j-i+1){//替换的字符不够了
                numbers[s.charAt(i)-'A']--;//i对应的字符数量减一
                i++;//指针前移。
            }
            j++;
        }
        return j-i;
    }
}
// @lc code=end

